﻿<UserControl x:Class="FsWpfControls.FsRichTextBox.FsRichTextBox"
             x:Name="FsRichTextBoxControl"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
             mc:Ignorable="d" 
             d:DesignHeight="600" d:DesignWidth="800">
    
    <UserControl.Resources>
        
        <!-- Flat Button -->
        <ControlTemplate x:Key="FlatButtonControlTemplate" TargetType="{x:Type Button}">
            <Border x:Name="OuterBorder" BorderBrush="Transparent" BorderThickness="1" CornerRadius="2">
                <Border x:Name="InnerBorder" Background="Transparent" BorderBrush="Transparent" BorderThickness="1" CornerRadius="2">
                    <ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center" RecognizesAccessKey="True" Margin="{TemplateBinding Padding}" />
                </Border>
            </Border>
            <ControlTemplate.Triggers>
                <Trigger Property="IsMouseOver" Value="True">
                    <Setter TargetName="OuterBorder" Property="BorderBrush" Value="#FF7CA0CC" />
                    <Setter TargetName="InnerBorder" Property="BorderBrush" Value="#FFE4EFFD" />
                    <Setter TargetName="InnerBorder" Property="Background" Value="#FFDAE7F5" />
                </Trigger>
                <Trigger Property="IsPressed" Value="True">
                    <Setter TargetName="OuterBorder" Property="BorderBrush" Value="#FF2E4E76" />
                    <Setter TargetName="InnerBorder" Property="BorderBrush" Value="#FF116EE4" />
                    <Setter TargetName="InnerBorder" Property="Background" Value="#FF3272B8" />
                </Trigger>
            </ControlTemplate.Triggers>
        </ControlTemplate>

        <!-- Flat Toggle Button -->
        <ControlTemplate x:Key="FlatToggleButtonControlTemplate" TargetType="{x:Type ToggleButton}">
            <Border x:Name="OuterBorder" BorderBrush="Transparent" BorderThickness="1" CornerRadius="2">
                <Border x:Name="InnerBorder" Background="Transparent" BorderBrush="Transparent" BorderThickness="1" CornerRadius="2">
                    <ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center" RecognizesAccessKey="True" Margin="{TemplateBinding Padding}" />
                </Border>
            </Border>
            <ControlTemplate.Triggers>
                <Trigger Property="IsMouseOver" Value="True">
                    <Setter TargetName="OuterBorder" Property="BorderBrush" Value="#FF7CA0CC" />
                    <Setter TargetName="InnerBorder" Property="BorderBrush" Value="#FFE4EFFD" />
                    <Setter TargetName="InnerBorder" Property="Background" Value="#FFDAE7F5" />
                </Trigger>
                <Trigger Property="IsPressed" Value="True">
                    <Setter TargetName="OuterBorder" Property="BorderBrush" Value="#FF2E4E76" />
                    <Setter TargetName="InnerBorder" Property="BorderBrush" Value="#FF116EE4" />
                    <Setter TargetName="InnerBorder" Property="Background" Value="#FF3272B8" />
                </Trigger>
                <Trigger Property="IsChecked" Value="True">
                    <Setter TargetName="OuterBorder" Property="BorderBrush" Value="#FFFFC00A" />
                    <Setter TargetName="InnerBorder" Property="BorderBrush" Value="#FFFFDE7F" />
                    <Setter TargetName="InnerBorder" Property="Background" Value="#FFFFD458" />
                </Trigger>
            </ControlTemplate.Triggers>
        </ControlTemplate>

    </UserControl.Resources>

    <DockPanel LastChildFill="True" >
        <Border 
            DockPanel.Dock="Top" 
            BorderThickness="{Binding ElementName=FsRichTextBoxControl, Path=ToolbarBorderThickness}" 
            BorderBrush="{Binding ElementName=FsRichTextBoxControl, Path=ToolbarBorderBrush}" 
            SnapsToDevicePixels="True" >
            <StackPanel Orientation="Horizontal" Height="24" Background="{Binding ElementName=FsRichTextBoxControl, Path=ToolbarBackground}" >

            <!-- Font drop-down code from http://www.bennedik.de/2007/10/wpf-fast-font-drop-down-list.html -->

            <!-- Font family combo box  -->
            <ComboBox x:Name="FontFamilyCombo" Height="23" Width="100"  Margin="5,2,0,2" IsEditable="True" SelectionChanged="OnFontFamilyComboSelectionChanged">
                <ComboBox.ItemsPanel>
                    <ItemsPanelTemplate>
                        <VirtualizingStackPanel Width="250" />
                    </ItemsPanelTemplate>
                </ComboBox.ItemsPanel>
                <ComboBox.ItemTemplate>
                    <DataTemplate>
                        <TextBlock Text="{Binding}" FontFamily="{Binding}" FontSize="15" Height="20"/>
                    </DataTemplate>
                </ComboBox.ItemTemplate>
            </ComboBox>

            <!-- Font size combo box -->
            <ComboBox x:Name="FontSizeCombo" Height="23" Width="40" Margin="5,2,5,2" IsEditable="True" SelectionChanged="OnFontSizeComboSelectionChanged" />
            
            <Button Command="ApplicationCommands.Cut" CommandTarget="{Binding ElementName=TextBox}" ToolTip="Cut" Template="{StaticResource FlatButtonControlTemplate}" Margin="0,1,0,1">
                <Image Source="Images\editcut.png" Stretch="None" SnapsToDevicePixels="True" />
            </Button>

            <Button Command="ApplicationCommands.Copy" CommandTarget="{Binding ElementName=TextBox}" ToolTip="Copy" Template="{StaticResource FlatButtonControlTemplate}" Margin="0,1,0,1">
                <Image Source="Images\editcopy.png" Stretch="None" SnapsToDevicePixels="True" />
            </Button>

            <Button Command="ApplicationCommands.Paste" CommandTarget="{Binding ElementName=TextBox}" ToolTip="Paste" Template="{StaticResource FlatButtonControlTemplate}" Margin="0,1,0,1">
                <Image Source="Images\editpaste.png" Stretch="None" SnapsToDevicePixels="True" />
            </Button>

            <Button Command="ApplicationCommands.Undo" CommandTarget="{Binding ElementName=TextBox}" ToolTip="Undo" Template="{StaticResource FlatButtonControlTemplate}"  Margin="0,1,0,1">
                <Image Source="Images\editundo.png" Stretch="None" SnapsToDevicePixels="True" />
            </Button>

            <Button Command="ApplicationCommands.Redo" CommandTarget="{Binding ElementName=TextBox}" ToolTip="Redo" Template="{StaticResource FlatButtonControlTemplate}"  Margin="0,1,0,1">
                <Image Source="Images\editredo.png" Stretch="None"  SnapsToDevicePixels="True" />
            </Button>

            <Image Source="Images\separator.png" Stretch="None" SnapsToDevicePixels="True" />

            <ToggleButton x:Name="BoldButton" Command="EditingCommands.ToggleBold" CommandTarget="{Binding ElementName=TextBox}" ToolTip="Bold" Template="{StaticResource FlatToggleButtonControlTemplate}" Margin="0,1,0,1">
                <Image Source="Images\fontbold.png" Stretch="None" SnapsToDevicePixels="True" />
            </ToggleButton>

            <ToggleButton x:Name="ItalicButton" Command="EditingCommands.ToggleItalic" CommandTarget="{Binding ElementName=TextBox}" ToolTip="Italic" Template="{StaticResource FlatToggleButtonControlTemplate}" Margin="0,1,0,1">
                <Image Source="Images\fontitalic.png" Stretch="None" SnapsToDevicePixels="True" />
            </ToggleButton>

            <ToggleButton x:Name="UnderlineButton" Command="EditingCommands.ToggleUnderline" CommandTarget="{Binding ElementName=TextBox}" ToolTip="Underline" Template="{StaticResource FlatToggleButtonControlTemplate}" Margin="0,1,0,1">
                <Image Source="Images\fontunderline.png" Stretch="None" SnapsToDevicePixels="True" />
            </ToggleButton>
            <Image Source="Images\separator.png" Stretch="None" SnapsToDevicePixels="True" />

            <Button ToolTip="Format as normal (non-code) text" Template="{StaticResource FlatButtonControlTemplate}" Margin="0,1,0,1" Visibility="{Binding Path=CodeControlsVisibility, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type UserControl}}}" Click="OnNormalTextClick">
                <Image Source="Images\normaltext.png" Stretch="None" SnapsToDevicePixels="True" />
            </Button>

            <Button ToolTip="Format as code block" Template="{StaticResource FlatButtonControlTemplate}" Margin="0,1,0,1" Visibility="{Binding Path=CodeControlsVisibility, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type UserControl}}}" Click="OnCodeBlockClick">
                <Image Source="Images\codeblock.png" Stretch="None" SnapsToDevicePixels="True" />
            </Button>

            <Button ToolTip="Format as inline code" Template="{StaticResource FlatButtonControlTemplate}" Margin="0,1,0,1" Visibility="{Binding Path=CodeControlsVisibility, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type UserControl}}}" Click="OnInlineCodeClick">
                <Image Source="Images\codeinline.png" Stretch="None" SnapsToDevicePixels="True" />
            </Button>

            <Image Source="Images\separator.png" Stretch="None" SnapsToDevicePixels="True" Visibility="{Binding Path=CodeControlsVisibility, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type UserControl}}}" />

            <ToggleButton x:Name="LeftButton" Command="EditingCommands.AlignLeft" CommandTarget="{Binding ElementName=TextBox}" ToolTip="Align Left" Template="{StaticResource FlatToggleButtonControlTemplate}" Margin="0,1,0,1" Click="OnAlignmentButtonClick">
                <Image Source="Images\alignleft.png" Stretch="None" SnapsToDevicePixels="True" />
            </ToggleButton>

            <ToggleButton x:Name="CenterButton" Command="EditingCommands.AlignCenter" CommandTarget="{Binding ElementName=TextBox}" ToolTip="Align Center" Template="{StaticResource FlatToggleButtonControlTemplate}" Margin="0,1,0,1" Click="OnAlignmentButtonClick">
                <Image Source="Images\aligncenter.png" Stretch="None" SnapsToDevicePixels="True" />
            </ToggleButton>

            <ToggleButton x:Name="RightButton" Command="EditingCommands.AlignRight" CommandTarget="{Binding ElementName=TextBox}" ToolTip="Align Right" Template="{StaticResource FlatToggleButtonControlTemplate}" Margin="0,1,0,1" Click="OnAlignmentButtonClick">
                <Image Source="Images\alignright.png" Stretch="None" SnapsToDevicePixels="True" />
            </ToggleButton>

            <ToggleButton x:Name="JustifyButton" Command="EditingCommands.AlignJustify" CommandTarget="{Binding ElementName=TextBox}" ToolTip="Align Justify" Template="{StaticResource FlatToggleButtonControlTemplate}" Margin="0,1,0,1" Click="OnAlignmentButtonClick">
                <Image Source="Images\alignjustify.png" Stretch="None" SnapsToDevicePixels="True" />
            </ToggleButton>
            <Image Source="Images\separator.png" Stretch="None" SnapsToDevicePixels="True" />

                <ToggleButton x:Name="BulletsButton" Command="EditingCommands.ToggleBullets" CommandTarget="{Binding ElementName=TextBox}" ToolTip="Bullets" Template="{StaticResource FlatToggleButtonControlTemplate}"  Margin="0,1,0,1" Click="OnListButtonClick">
                <Image Source="Images\listbullets.png" Stretch="None" SnapsToDevicePixels="True" />
            </ToggleButton>

                <ToggleButton x:Name="NumberingButton" Command="EditingCommands.ToggleNumbering" CommandTarget="{Binding ElementName=TextBox}" ToolTip="Numbering" Template="{StaticResource FlatToggleButtonControlTemplate}"  Margin="0,1,0,1" Click="OnListButtonClick">
                <Image Source="Images\listnumbers.png" Stretch="None" SnapsToDevicePixels="True" />
            </ToggleButton>

            <Image Source="Images\separator.png" Stretch="None" />

            <Button Command="EditingCommands.IncreaseIndentation" CommandTarget="{Binding ElementName=TextBox}" ToolTip="Increase Indentation" Template="{StaticResource FlatButtonControlTemplate}"  Margin="0,1,0,1">
                <Image Source="Images\indentincrease.png" Stretch="None" SnapsToDevicePixels="True" />
            </Button>

            <Button Command="EditingCommands.DecreaseIndentation" CommandTarget="{Binding ElementName=TextBox}" ToolTip="Decrease Indentation" Template="{StaticResource FlatButtonControlTemplate}"  Margin="0,1,0,1">
                <Image Source="Images\indentdecrease.png" Stretch="None" SnapsToDevicePixels="True" />
            </Button>

        </StackPanel>
        </Border>
        <RichTextBox x:Name="TextBox" TextOptions.TextFormattingMode="Ideal" TextOptions.TextRenderingMode="Aliased" AcceptsTab="True" AcceptsReturn="True" IsEnabled="{Binding Path=IsEnabled, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type UserControl}}}" TextChanged="OnTextChanged" VerticalScrollBarVisibility="Auto" SelectionChanged="OnTextBoxSelectionChanged" />
    </DockPanel>
</UserControl>
